数字电路 - 电路分析与设计
November 5, 2025
Table of Contents
Table of Contents
卡诺图和函数标准型
布尔函数标准型
这部分主要讨论了如何用标准和规范的形式来表示逻辑问题。
1. 逻辑函数的表示方法
一个逻辑函数可以用多种形式来表示,主要有三种:
- 真值表: 列出所有输入变量取值的组合以及对应的函数输出值。
- 优点: 直观、唯一。
- 缺点: 当变量增多时,表格会变得非常庞大。
- 逻辑表达式: 使用逻辑运算符(与、或、非)连接变量来表示逻辑关系。例如:
F = (X'Y'Z) + (XY'Z') + (XY'Z) + (XYZ') + (XYZ)- 简化后可以是
F = X + Y'Z
- 逻辑图: 使用标准的逻辑门符号(AND, OR, NOT 等)将逻辑表达式图形化,直观地表示电路结构。
核心思想:虽然一个逻辑函数的真值表是唯一的,但其逻辑表达式和逻辑图却可以有多种形式。不同的表达式和逻辑图功能相同,但其性能(如成本、速度)可能有很大差异。因此,我们需要找到最简化的形式。
2. 标准形式
为了使逻辑函数的表示更加规范,我们引入了“标准型”或“范式”的概念,主要有两种:
标准积之和 (SOP - Sum of Products)
-
最小项 (Minterm):
- 一个包含函数所有
n个变量的乘积项。 - 每个变量在最小项中以原变量或反变量的形式出现,且仅出现一次。
- 变量约定:原变量为
1,反变量为0。 - 例如,对于三变量函数
F(A, B, C),乘积项A'BC对应的二进制是011,所以它是最小项m₃。
- 一个包含函数所有
-
标准积之和表达式 (Sum of Minterms):
- 也称为“最小项之和”,是由若干个最小项通过逻辑或运算组成的表达式。
- 任何一个逻辑函数都可以表示为唯一的最小项之和形式。
- 示例:
F(A,B,C) = m₁ + m₃ + m₄ + m₅ = Σm(1,3,4,5)
标准和之积 (POS - Product of Sums)
-
最大项 (Maxterm):
- 一个包含函数所有
n个变量的和项。 - 每个变量在最大项中以原变量或反变量的形式出现,且仅出现一次。
- 变量约定:原变量为
0,反变量为1。 - 例如,对于三变量函数
F(A, B, C),和项A+B'+C'对应的二进制是011,所以它是最大项M₃。
- 一个包含函数所有
-
标准和之积表达式 (Product of Maxterms):
- 也称为“最大项之积”,是由若干个最大项通过逻辑与运算组成的表达式。
- 示例:
F(A,B,C) = M₀ · M₂ · M₆ · M₇ = ΠM(0,2,6,7)
最小项与最大项的关系
最小项和最大项之间存在互补关系:
因此,一个逻辑函数的最小项之和表达式与最大项之积表达式是等价的。例如:
卡诺图化简
代数化简法比较复杂,卡诺图提供了一种更简单、更直观的图形化方法来简化逻辑函数。
1. 什么是卡诺图 (Karnaugh Map)?
xy + xy' = x
卡诺图是真值表的一种图形化表示,它将 n 个变量的 2ⁿ 个最小项用 2ⁿ 个小方格表示。这些方格按照特定的规则排列(格雷码顺序),使得几何上相邻的方格在逻辑上也相邻(即只有一个变量不同)。
下面是一个三变量 (X, Y, Z) , 的卡诺图结构示例:
| X | YZ | ||||
|---|---|---|---|---|---|
| 00 | 01 | 11 | 10 | ||
| 0 | X' | 0 | 1 | 0 | 0 |
| 1 | X | 1 | 1 | 1 | 1 |
图例:
- 浅蓝色 (Group A): 对应项 X (m4, m5, m6, m7)
- 浅绿色 (Group B): 对应项 Y'Z (m1, m5)
- 浅橙色 (Group A+B): 两个圈的重叠部分 (m5)
- 行和列: 代表了变量的不同取值组合。
- 方格: 每个方格对应一个唯一的最小项。
2. 使用卡诺图化简的步骤
用大白话说就是:如果两件事,唯一的区别是一个需要条件 y,另一个需要条件 y’,那么其实条件 y 根本不重要,只要满足共同的条件 x 就行了。(即满足:xy + xy' = x)
“画卡诺圈”这个动作,就是在用眼睛找出所有符合 xy + xy’ = x 这种模式的“邻居”! 每画一个圈,你就是在进行一次这样的化简,但你根本不需要动笔去算代数。
-
绘制卡诺图: 根据逻辑函数中的最小项,在对应的方格中标
1,其余方格标0(或不标)。 -
画卡诺圈 (Grouping):
- 将相邻的
1方格圈起来。 - 圈必须是矩形,且包含的
1的数量必须是 (如1, 2, 4, 8…)。 - 目标是圈尽可能大,圈的数量尽可能少。
- 卡诺图的边界是循环的,即第一行和最后一行相邻,第一列和最后一列也相邻。
- 将相邻的
-
写出最简表达式:
- 每一个卡诺圈对应一个化简后的与项。
- 找出圈内保持不变的变量,写入与项中。如果变量值为
1,则为原变量;如果为0,则为反变量。 - 将所有卡诺圈对应的与项相加(逻辑或),即可得到最简的“与或”表达式。

核心思想:画圈 = 目视化简
- 画圈 (Grouping):就是一个找邻居的游戏。你的任务是用尽可能大的矩形(大小必须是
2, 4, 8…)把所有的1都框起来。记住,地图是卷起来的,最左和最右是邻居,最上和最下也是邻居。 - 解读 (Writing the term):对于你画的每一个圈,你都要做一个“找不同”的游戏。把那些在圈内变来变去的变量都扔掉,只留下从头到尾保持不变的变量。

3. 含无关项的函数化简
- 无关项 (Don’t Care terms): 在某些实际逻辑问题中,一些输入组合永远不会出现,或者出现时其输出结果无关紧要。这些项称为无关项,在卡诺图中用
d或X表示。 - 化简策略:
- 在画圈时,可以利用
d项来使卡诺圈变得更大,从而得到更简化的结果。 d项可以被圈,也可以不被圈,取决于是否有利于化简。- 但是,不能单独只圈
d项。必须至少包含一个1。
- 在画圈时,可以利用

4. 冒险 (Hazards)
-
定义: 当电路的输入信号发生变化时,由于电路中存在的延迟,输出端可能会产生非正常的短暂尖峰脉冲(毛刺,Glitch)。这种现象称为冒险。

-
产生原因: 在卡诺图中,如果两个卡诺圈相切(即没有重叠部分),当输入信号在两个圈的边界切换时,就可能产生冒险。
-
消除方法:
-
增加冗余项: 在卡诺图中,为两个相切的卡诺圈增加一个跨立在这两个圈上的冗余圈。这样会使电路不再是最简的,但可以消除冒险。

-
其他方法: 增加滤波电容或使用选通脉冲。
-
关于电路延迟,有这样的介绍:
| 延迟模型 | 定义 | 特性 |
|---|---|---|
| 零延迟 | 一种理想化模型,不考虑任何延迟。输出信号在输入信号变化的瞬间立即发生相应的变化。 | 理想化:在实际电路中不存在,主要用于逻辑功能的验证。 瞬时响应:输出波形与输入信号之间没有时间差。 |
| 传输延迟 | 该模型认为,逻辑门的输出波形是理想输出波形在时间轴上平移一个固定时间后的结果。 | 保留所有变化:无论输入信号变化多快、脉冲多窄,都会被完整地传播到输出端,只是时间上有所延迟。 波形不变:输出波形形状与理想输出完全相同,只是被延后了。 |
| 惯性延迟 | 一种更接近实际电路行为的模型。它不仅包含一个传输延迟,还引入了一个“拒绝时间”的概念。 | 脉冲过滤:如果由输入变化引起的理想输出脉冲的宽度小于拒绝时间,那么这个脉冲将被“吸收”,不会出现在最终的输出端。 模拟惯性:该模型模拟了真实电路需要一定能量和时间来改变状态的“惯性”。过窄的毛刺信号因能量不足而被滤除。 |
组合电路分析与设计
简单来说,就是学习怎么分析一个别人给你的逻辑电路,以及怎么根据需求自己设计一个逻辑电路。
什么是组合电路?
组合逻辑电路是数字电路中最基本的一种。你可以把它想象成一个“黑盒子”,它有几个输入端和几个输出端。
它的核心特点非常简单:
- 输出只看现在:在任何时候,电路的输出值只取决于那一瞬间的输入值,跟电路过去的状态一点关系都没有。
- 没有记忆:电路内部不包含任何能“记住”过去状态的元件(比如触发器)。
- 没有回路:信号从输入端流向输出端,是单向的,没有反馈回路(即输出信号不会再绕回到输入端)。
组合电路的分析
“分析”就像是给你一个已经搭建好的乐高模型,让你搞清楚它到底是什么,能做什么。
目标:从一个已知的电路图,推导出它的逻辑功能。
分析步骤(通用流程)
- 写出逻辑表达式:从电路的输入端开始,逐级向后推导,写出每个逻辑门的输出表达式,直到得到最终输出端的完整逻辑表达式。
- 化简或变换表达式:对得到的表达式进行化简(使用布尔代数或卡诺图),或者根据需要变换成“与或”、“或与”等标准形式。
- 列出真值表:根据最终的逻辑表达式,列出所有输入组合对应的输出值,形成真值表。
- 确定功能:观察真值表或分析逻辑关系,用语言描述出这个电路实现了什么功能。
举例:分析一个一位全加器
下面的电路有两个输出 J 和 H。

-
写表达式:
- 对于
J:J = (A·B) + ((A+B)·C) - 对于
H:H = (A+B+C) · (A·B + A·C + B·C)' + (A·B·C)(这个表达式比较复杂,可以通过化简或直接列真值表来分析)
- 对于
-
列真值表:
通过逐一分析输入A, B, C的8种组合(从000到111),我们可以得到下面的真值表:
| A | B | C (进位输入) | J (进位输出) | H (和) |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 | 1 |
| 0 | 1 | 0 | 0 | 1 |
| 0 | 1 | 1 | 1 | 0 |
| 1 | 0 | 0 | 0 | 1 |
| 1 | 0 | 1 | 1 | 0 |
| 1 | 1 | 0 | 1 | 0 |
| 1 | 1 | 1 | 1 | 1 |
- 确定功能:
观察真值表可以发现,这完全符合二进制加法规则。A和B是两个加数,C是来自低位的进位。H是A+B+C的“和”,J是产生的向高位的“进位”。
所以,这个电路的功能是一个一位全加器。
组合电路的设计
“设计”则完全相反,是给你一个任务(比如“我要一个能比较大小的电路”),让你从零开始把它搭建出来。

目标:根据实际的逻辑需求,设计出最简单的、符合功能的逻辑电路。

设计步骤(通用流程)
-
逻辑抽象:
- 搞清楚需求:明确要解决什么问题。
- 定义输入输出:确定需要几个输入变量和几个输出变量。
- 赋予逻辑含义:定义
0和1分别代表什么状态(例如,1代表“有故障”,0代表“正常”)。
-
列出真值表:
- 根据第一步的逻辑定义,遍历所有可能的输入组合,并写出每种情况下期望的输出值。
-
写出并化简逻辑表达式:
- 从真值表中,为每一个输出变量写出它的逻辑表达式(通常先写成“最小项之和”的形式)。
- 使用卡诺图等工具对表达式进行化简,得到最简的“与或”式。这是为了让最终的电路使用的逻辑门最少,成本最低。
-
画出逻辑电路图:
- 根据化简后的逻辑表达式,使用对应的逻辑门(与门、或门、非门等)画出最终的电路图。
层次化设计方法
当电路变得非常复杂时(比如设计一个 CPU),一步到位画出所有逻辑门是不现实的。这时就需要“层次化设计”的思想。
核心思想:分而治之。把一个复杂的大问题,分解成若干个简单的小问题来解决。
graph TD
subgraph 设计流程
direction LR
A(自顶向下分解) --> B(自底向上实现);
end
subgraph 示例: 4位比较器
C(比较两个4位数) --> D(比较两个1位数);
D --> E(用逻辑门实现1位比较);
E -- 组合 --> F(用4个1位比较器搭成4位比较器);
end
-
自顶向下分解 (Top-Down):
- 从最高层的功能入手(例如:设计一个4位相等比较器)。
- 把它分解成几个功能更简单的子模块(例如:4个1位相等比较器)。
- 如果子模块还复杂,就继续分解,直到模块足够简单,可以用基本逻辑门直接实现。
-
自底向上实现 (Bottom-Up):
- 先设计和实现最底层的、最简单的模块(例如:用逻辑门搭建出1位相等比较器)。
- 然后像搭积木一样,用这些已经实现的小模块去组装成更高级、更复杂的模块(例如:用4个1位比较器模块,连接成一个4位相等比较器)。
优点:
- 思路清晰,降低复杂度:每次只专注于一个简单的小模块。
- 便于重用:设计好的模块可以被多次使用,提高效率。
- 易于维护和调试:如果出错,可以快速定位到具体是哪个模块的问题。
时序电路简介、存储元件与电路分析
时序电路简介
1. 为什么需要时序电路?
- 组合电路的特点: 输出仅由当前的输入决定,无记忆功能。
- 时序电路的特点:
输出不仅与当前输入有关,还与电路过去的状态(即过去的输入序列)有关。它具有记忆功能。
2. 时序电路的基本结构
时序电路通常由两部分构成:
- 组合电路: 处理加工信息,根据当前输入和当前状态产生输出和下一个状态的激励信号。
- 存储元件 (Memory Elements): 保存信息,用于记忆电路的当前状态。
3. 状态 (State)
- 定义: 对过去输入序列的一种抽象表达,是电路记忆内容的体现。
- 有限状态机 (Finite-State Machine, FSM): 时序电路的数学模型,因为它只有有限个状态。

4. 时序电路模型
根据输出信号的产生方式,分为两种主要类型:
- Mealy 型: 输出由 当前输入 和 当前状态 共同决定。可以理解为输出是在状态转换的瞬间里产生的。
Outputs = g(Inputs, Present_State)
- Moore 型: 输出仅由 当前状态 决定。只要进入某个状态,输出就固定了。输入只决定下一个要去哪个状态。
Outputs = h(Present_State)
- 混合型: 看情况决定输出状态。

5. 状态图 (State Diagram)
- 圆圈: 表示一个状态,圈内可标注状态名和/或该状态下的输出(Moore 型)。
- 有向弧: 表示状态之间的转换。
- 弧上的标注:
输入/输出。表示在当前状态下,若发生该“输入”,则电路转换到下一个状态,并产生对应的“输出”(Mealy 型)。
存储元件
1. 锁存器 (Latch)
-
功能: 用来捕获和存储数据。
-
特点: 电平触发,具有“透明性”。当控制信号(如时钟 C)有效时,输出 Q 会跟随输入 D 的变化而变化,就像是透明的。
-
SR 锁存器:
- S (Set): 置位,使 Q=1。
- R (Reset): 复位,使 Q=0。
SR=11为不允许的输入状态,此时 Q 与 Q‘均为0,需要改进。

-
D 锁存器:
- 在 SR 锁存器基础上改进,只有一个数据输入 D,避免了
SR=11的情况。
- 在 SR 锁存器基础上改进,只有一个数据输入 D,避免了

问题: “透明性”可能导致电路状态不稳定或振荡。

2. 触发器 (Flip-Flop)
-
功能: 在特定的时刻(时钟沿)采样并存储数据。
-
特点: 边沿触发(如上升沿或下降沿),不具有“透明性”。只有在时钟的有效边沿到来时,输出才会根据当时的输入发生改变,在其他时间保持不变。
-
主从式 D 触发器:
- 由两个锁存器(主、从)构成,一个在时钟高电平工作,一个在低电平工作,从而实现在时钟的特定边沿完成一次数据锁存和输出。


- 由两个锁存器(主、从)构成,一个在时钟高电平工作,一个在低电平工作,从而实现在时钟的特定边沿完成一次数据锁存和输出。
-
应用:
- 锁存器:用于快速捕获异步或随机输入。
- 触发器:用于在同步系统中,周期性地、精确地存储信号。
时序电路分析
1. 目标
对一个给定的时序电路,通过分析其逻辑连接,确定它的功能。
2. 分析步骤
-
写出逻辑方程:
- 输出方程: 确定电路的输出
Y与当前状态(如A, B)和输入X之间的关系。 - 激励方程 (触发器输入方程): 确定每个触发器的数据输入(如
D_A, D_B)与当前状态和输入X之间的关系。这个方程也决定了电路的下一状态。
- 输出方程: 确定电路的输出
-
建立状态表 (State Table):
- 列出电路所有可能的现态 (Present State)。
- 针对每一种输入,根据激励方程计算出次态 (Next State)。
- 根据输出方程计算出对应的输出。
-
画出状态图 (State Diagram):
- 将状态表中的信息用图形化的方式表示出来,每个状态是一个节点,状态转换为有向弧。
-
描述电路功能:
- 根据状态图的转换规律,用文字描述电路实现了何种功能(例如:序列检测器、计数器等)。
示例:1101序列识别器
通过分析一个电路,最终得到其状态图,并发现只有当输入序列的末尾是“1101”时,输出才为1,从而判断出这是一个“1101序列识别器”。
时序电路设计
这一部分聚焦于“怎么做”,涵盖设计陷阱、具体步骤和典型例题思路。
寄存器的设计:如何优雅地控制加载?
设计目标:我们需要一个信号(Enable)来决定是否更新寄存器的值。
-
方法 A:控制时钟(Clock Gating)—— 不推荐
- 做法:用一个“或门”或“与门”把时钟信号和控制信号混合,再连到触发器的 CLK 端。
- 缺陷:时钟歪斜 (Clock Skew)。经过门电路后,时钟信号会变慢(延迟),导致这个寄存器和其他寄存器的步调不一致,容易产生严重的读写错误。
-
方法 B:控制数据(Data Gating)—— 推荐标准做法
-
做法:保持时钟信号纯净(直接连到 CLK),在 D 输入端加一个 2选1多路选择器 (MUX)。
-
逻辑:
- Enable = 1 时:MUX 选择“新数据”进入 D。
- Enable = 0 时:MUX 选择“老数据”(输出 Q 反馈回输入 D),也就是保持不变。
-
优点:电路虽然复杂一点,但时钟完全同步,极其稳定。
-
计数器的设计:如何构造任意进制计数器?
A. 基础分类选择
-
行波计数器 (Ripple Counter):
- 原理:前一个触发器的输出充当后一个的时钟。
- 缺点:像多米诺骨牌,翻转有延迟,速度慢,容易产生中间态的“毛刺”。
-
同步计数器 (Synchronous Counter):
- 原理:所有触发器共用同一个时钟,状态变化由组合逻辑
D=f(Q)D=f(Q)
决定。 - 优点:速度快,适合高速电路。
- 原理:所有触发器共用同一个时钟,状态变化由组合逻辑
B. 实战:设计一个模 NN (任意进制) 计数器
场景:你需要一个“模10计数器”(0数到9,然后回0),但你手头只有一个4位二进制计数器(能从0数到15)。
-
方法一:异步清零法 (Reset)
- 让计数器正常向上计数。
- 当数字变成 10 (二进制 1010) 的瞬间,检测到这个状态。
- 利用与非门检测
Q3=1Q3=1且Q1=1Q1=1。 - 输出信号连接到计数器的 异步 Reset/Clear 端。
- 注意:这会产生极短的脉冲(毛刺),因为状态“10”只存在了一瞬间就被清零了。
-
方法二:同步置数法 (Load) —— 推荐
- 利用计数器的 Load (并行加载) 功能。
- 当计数值达到 9 (二进制 1001) 时(即终点)。
- 检测到“9”这个状态,让 Load Enable 信号有效。
- 将数据输入端置为 0 (初始值)。
- 在下一个时钟沿到来时,计数器不是加1,而是把0“加载”进去。
- 扩展:如果要设计 5~14 的计数器?
- 检测到 14 时,置 Load 有效。
- 输入端设置为 5。
- 结果:…13 -> 14 -> (下一个时钟) -> 5 -> 6…
移位寄存器的应用与设计
A. 环形与扭环计数器 (自启动设计)
这些是基于移位寄存器的特殊计数器。
- 环形计数器 (Ring Counter):
- 原理:把输出 Q 连回输入 D。像个圈。
- 特点:
1000->0100->0010->0001->1000。 - 优点:无需译码器即可得到独热码(One-hot)信号。
- 扭环计数器 (Johnson Counter):
- 原理:把输出 (反相) 连回输入 D。
- 特点:4位可以产生8个状态(2N)。
- 健壮性设计(自启动):
- PPT提到“当状态出现 0xx0 时重新装载 0001”。这是因为如果电路受到干扰进入了无效状态(比如环形计数器变成了
1100),它可能永远转不出来。设计时需增加逻辑电路检测无效状态并强制复位。

- PPT提到“当状态出现 0xx0 时重新装载 0001”。这是因为如果电路受到干扰进入了无效状态(比如环形计数器变成了
B. 移位运算逻辑
PPT 第19页核心总结:

- 逻辑移位 (Logical Shift):用于无符号数或纯数据处理。
- 不管左移右移,空位统统补 0。
- 算术移位 (Arithmetic Shift):用于有符号数(补码)。
- 左移(x2):空位补 0 (若符号位改变则发生溢出)。
- 右移(/2):符号位不变,空位补符号位(即:正数补0,负数补1)。
- 例题:
- 8位补码
1111 0000(代表 -16) - 算术右移一位 ->
1111 1000(最高位补1,代表 -8) -> 正确除以2。 - 逻辑右移一位 ->
0111 1000(最高位补0,变成了正数) -> 算术错误。
- 8位补码